﻿/// <reference path="jquery.intellisense.js"/>
/// <reference path="common.js" />
var selectedIds = new Array();
var tableRootDiv = '#tableholder';
var tableController = '';
var tableAction = '';
var tableUrl = '';
var loading = false;

$(function() {
    $(document).bind('keydown', 'Ctrl+n', tableKeydown).bind('keypress', 'Ctrl+n', tableKeydown);

    initTable();

    if ($('.changed').length > 0) { setTimeout('hideChanged()', 1000); }
});

function tableKeydown() {
    if ($('.btncreate').length > 0) {
        if ($('.btncreate').get(0).tagName == 'A') {
            var url = $('.btncreate').attr('href');
            if (url.indexOf('http://') < 0) url = base + url;
            document.location.href = url;
        }
        else
            $('.btncreate').trigger('click');
    } return false;
}

function initTable() {
    tableController = $('#tablecontroller').val() + '.ivp/';
    tableAction = $('#tableaction').val();
    tableUrl = tableController + tableAction;
    if ($('#search').val()) $('#search').get(0).focus();

    $('.selectall').click(function() { selectAll('.rowid'); });
    $('.rowid').click(function() { selectRow(this.value, this.checked); });
    $(selectedIds).each(function(i, el) { selectRow(el, true, true); });
    $('#oldfilterid').change(function() { $('#filtername').val(this.options[this.selectedIndex].text); });

    try { afterInitTable(); } catch (e) { }

    loading = false;
}

function loadFilter() {
    if ($('#filterholder #filter').length > 0) { $('#filterholder').show(); return false; }
    var url = base + tableController + 'LoadFilter';
    $('body').append('<div id="filterholder" style="display: none;" class="popupwrapper"></div>').find('#filterholder').load(url, { timestamp: new Date() }, initFilter);
    return false;
}

function loadColumns() {
    if ($('#columnsholder #columns').length > 0) { $('#columnsholder').show(); return false; }
    var url = base + tableController + 'LoadColumns';
    $('body').append('<div id="columnsholder" style="display: none;" class="popupwrapper"></div>').find('#columnsholder').load(url, { timestamp: new Date() }, initColumns);
    return false;
}

function loadSavedStates() {
    var url = base + tableController + 'LoadSavedStates';
    $('#savedstates').load(url, { timestamp: new Date() });
}

function hideChanged() {
    var color = ($('.changed').hasClass('odd')) ? '#f3f7fc' : '#fff';
    $.include('js/jquery.color.js', function() { $('.changed').animate({ backgroundColor: color }, 1500); });
}

function initFilter() {
    if ($('#filter').length > 0) {
        if ($.fn.calendar) {
            $('#filter input.dateRU').calendar({ dateFormat: '%d.%m.%Y' });
            $('#filter input.dateTimeRU').calendar({ dateFormat: '%d.%m.%Y %H:%M' });
        }
        //Фильтр. Скрыть/показать поля для даты при изменении "равно" на "между"
        //Фильтр. Скрыть/показать поля для выбора при изменении условия с/на "задано","не задано"
        $('#filter .fttdate').change(function() {
            switch (this.value) {
                case "1":
                    $(this).parents('table').find('.fltdate').show();
                    $(this).parents('table').find('.date2').hide();
                    break;
                case "2":
                case "3":
                    $(this).parents('table').find('.fltdate').show();
                    $(this).parents('table').find('.date2').show();
                    break;
                case "4":
                case "5":
                    $(this).parents('table').find('.fltdate').hide();
                    $(this).parents('table').find('.date2').hide();
            }
        });
        //Фильтр. Скрыть/показать поля для чисел при изменении "равно" на "между"
        //Фильтр. Скрыть/показать поля для выбора при изменении условия с/на "задано","не задано"
        $('#filter .fttnumeric').change(function(el) {
            $(this).parents('table').find('.numeric').show();
            if (this.value == 5) $(this).parents('table').find('.numeric2').show(); else $(this).parents('table').find('.numeric2').hide();
            if (this.value == 4) { $('.numeric3', this.parentNode).show(); $(this).parents('table').find('.numeric').css('width', 150); } else { $(this).parents('table').find('.numeric3').hide(); $(this).parents('table').find('.numeric').css('width', 50); }
            if (this.value == 6 || this.value == 7) $(this).parents('table').find('.numeric').hide();
        });

        //Установка значений по умолчанию
        $('#filter .flttext').change(function() { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });
        $('#filter .numeric').change(function() { var ftt = '#ftt' + this.id.substr(4); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });
        //В зависимости от количества опций, выбрать "Входит в" или "Содержит любое из"
        $('#filter .fltselect').change(function() { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.selectedIndex >= 0) $(ftt).val(($('option', ftt).length > 5) ? 3 : 1); });
        $('#filter .flttree').change(function() { var ftt = '#ftt' + this.id.substr(3); if ($(ftt).val() == 0 && this.selectedIndex >= 0) $(ftt).val(3); });
        $('#filter .fltdate').change(function() { var ftt = '#ftt' + this.id.substr(4); if ($(ftt).val() == 0 && this.value.length > 0) $(ftt).val(1); });

        //Заменим выпадающие списки на спец. контрол
        if ($.multipleSelect) $.multipleSelect.initByClassName('.multipleselect', { maxwidth: '300px', init: true });

        //Фильтр. Скрыть/показать поля для выбора при изменении условия с/на "задано","не задано"
        $('#filter .fttselect').change(function() {
            if (this.value == 3 || this.value == 4) $(this).parents('tr').find('.tdvalue div').hide(); else $(this).parents('tr').find('.tdvalue div').show();
        });
        $('#filter .fttrelation').change(function() {
            if (this.value == 7 || this.value == 8) $(this).parents('tr').find('.tdvalue div').hide(); else $(this).parents('tr').find('.tdvalue div').show();
        });
        $('#filter .ftttext').change(function() {
            if (this.value == 7 || this.value == 8) $(this).parents('tr').find('.flttext').hide(); else $(this).parents('tr').find('.flttext').show();
        });
        $('#filter .ftttree').change(function() {
            var self = this;
            var flt = $('#flt' + self.id.substr(3));
            var ms = flt.data('multipleselect');
            if (self.value == 1 || self.value == 2) {
                flt.attr('multiple', false);
                ms.unwrapControl();
            }
            else {
                flt.attr('multiple', true);
                ms.wrapControl(true);
            }
        }).trigger('change');
        $('#filterholder').show();
    }
}

function initColumns() {
    //Добавляем возможность двигать колонки
    var x = $('#columnorder').length;
    if ($('#columnorder').length > 0) $('#columnorder').sortable();
    $('#columnsholder').show();
}

function selectRow(val, check, skip) {
    var cb = $("#id" + val).get(0);
    if (check) {
        if (!skip) selectedIds.push(val);
        if (cb) {
            cb.checked = true;
            $(cb).parents('tr').addClass('selected');
        }
    }
    else {
        selectedIds = $.grep(selectedIds, function(i) { return i != val; });
        if (cb) {
            cb.checked = false;
            $(cb).parents('tr').removeClass('selected');
        }
    }
    try { if (rowChecked) rowChecked(val, check); } catch (e) { }
}

function selectAll() {
    $('input.rowid').each(function(i, el) { selectRow(el.value, !el.checked); });
    $('#rowids').attr('checked', false);
    return false;
}

function dosearch(evt) {
    var e = ($.browser.msie) ? event : evt;
    var keycode = ($.browser.msie) ? e.keyCode : e.which;
    if (keycode == 13)
        return _search();
    else return true;
}

function _search() {
    reloadTable(tableUrl, { tb_search: $('#search').val(), nolayout: true, timestamp: new Date() }, initTable);
    return false;
}

function orderBy(sort) {
    //На случай если фильтр уже открыт, установим сортировку по выбранной колонке в фильтре
    if ($('#columns').length > 0) {
        var col = sort.substr(0, sort.indexOf(' '));
        var desc = (sort.indexOf('desc') > 0);
        $('select.orderby').val('');
        $('select.orderby[column="' + col + '"]').get(0).selectedIndex = (desc ? 2 : 1);
    }
    var params = { tb_orderby: sort, nolayout: true };
    reloadTable(tableUrl, params, initTable);
    return false;
}

function changePage(page) {
    reloadTable(tableUrl, { tb_page: page, nolayout: true, timestamp: new Date() }, initTable);
    return false;
}

function applyFilter() {
    var params = $('#filter form').serializeArray();

    var orderby = '';
    $('select.orderby option:selected').each(function(i, el) { if (el.value) orderby += ((orderby.length > 0) ? ',' : '') + el.value; });

    params[params.length] = { name: 'tb_stateid', value: '' };
    if ($('#search').length > 0) params[params.length] = { name: 'tb_search', value: $('#search').val() };
    params[params.length] = { name: 'timestamp', value: new Date() };
    params[params.length] = { name: 'nolayout', value: true };

    $('div.multipleselectpopup').hide();
    $('#filterholder').hide(); $('ul.filterlist li.selected').removeClass('selected');
    $('#showfilter img').attr('src', $('#showfilter img').attr('src').replace('_active', '').replace('.gif', '_active.gif'));
    enableSaveAndClear();

    reloadTable(tableUrl, params, initTable);
    return false;
}

function applyColumns() {
    var params = $('#columns form').serializeArray();
    var orderby = '';
    $('select.orderby option:selected').each(function(i, el) { if (el.value) orderby += ((orderby.length > 0) ? ',' : '') + el.value; });

    params[params.length] = { name: 'tb_orderby', value: orderby };
    params[params.length] = { name: 'tb_stateid', value: '' };
    if ($('#search').length > 0) params[params.length] = { name: 'tb_search', value: $('#search').val() };
    params[params.length] = { name: 'timestamp', value: new Date() };
    params[params.length] = { name: 'nolayout', value: true };

    $('#columnsholder').hide(); $('ul.filterlist li.selected').removeClass('selected');
    $('#showcolumns img').attr('src', $('#showcolumns img').attr('src').replace('_active', '').replace('.gif', '_active.gif'));
    enableSaveAndClear();
    reloadTable(tableUrl, params, initTable);
    return false;
}

function disableSaveAndClear() {
    $('#showsavefilter img').attr('src', 'img/buttons/savefilter_disabled.gif'); $('#showsavefilter').addClass('disabled');
    $('#clearfilter img').attr('src', 'img/buttons/clearfilter_disabled.gif'); $('#clearfilter').addClass('disabled');
}

function enableSaveAndClear() {
    $('#showsavefilter img').attr('src', 'img/buttons/savefilter.gif'); $('#showsavefilter').removeClass('disabled');
    $('#clearfilter img').attr('src', 'img/buttons/clearfilter.gif'); $('#clearfilter').removeClass('disabled');
}

function clearFilter() {
    if ($('#clearfilter').hasClass('disabled')) return false;

    var params = { reset: true, nolayout: true, timestamp: new Date() };
    //Уберем фильтр чтобы сбросить его состояние
    $('#filterholder').remove(); $('ul.filterlist li.selected').removeClass('selected');
    $('#columnsholder').remove();
    $('#showfilter img').attr('src', $('#showfilter img').attr('src').replace('_active', ''));
    $('#showcolumns img').attr('src', $('#showcolumns img').attr('src').replace('_active', ''));
    $('#search').val('');
    disableSaveAndClear();
    loading = true;
    $(tableRootDiv).load(tableUrl, params, function() { initTable(); });
    return false;
}

function showSaveState(reload) {
    if ($('#showsavefilter').hasClass('disabled')) return false;

    if (reload || !$.trim($('#savefilterholder').html())) {
        var url = base + tableController + 'ShowSaveState';
        $('#savefilterholder').load(url, { timestamp: new Date() }, function() { $('#savefilterholder').show(); });
    }
    else $('#savefilterholder').show();
    return false;
}

function saveState() {
    $('#savefilterholder').hide();
    var url = base + tableController + 'SaveState';
    var params = $('#savefilterform').serializeArray();
    params[params.length] = { name: 'timestamp', value: new Date() };
    $('#savedstates').load(url, params, function() { $('#savefilterholder').html('') });
}

function deleteState(id) {
    if (!confirm('Вы уверены, что хотите удалить сохраненное представление?')) return false;

    var url = base + tableController + 'DeleteState/' + id;
    $('#savedstates').load(url, { timestamp: new Date() });
    return false;
}

function del(options) {
    if (selectedIds.length == 0) { alert('Отметьте галочками записи, которые вы хотите удалить.'); return false; }
    if (!confirm('Вы уверены, что хотите удалить выбранные записи?')) return false;

    var params = { id: selectedIds.join(','), nolayout: true, timestamp: new Date() };
    if (options != null) $.extend(params, options);

    var url = base + tableController + 'Delete';
    selectedIds.length = 0;
    loading = true;
    $(tableRootDiv).load(url, params, initTable);
    return false;
}

function selectFilterUsers(url, name) {
    var dlg = openDialog(url, 'selectusers', { width: 900, height: 650 });
    dlg.callback = function(uids) {
        var ms = jQuery.multipleSelects[name];
        $(uids.split(',')).each(function(i, id) {
            var un = dlg.userNames['un' + id.toString()];
            if ($('option[value="' + id + '"]', ms.select).length > 0) return;
            ms.select.append('<option selected value="' + id + '">' + un + '</option>');
            ms.addOption(id, un, true);
            ms.optionsToString();
            ms.select.trigger('change');
        });
    };
    return false;
}

function exportExcel() {
    params = $('form').serialize();
    window.open(base + tableController + 'excel?' + params);
    return false;
}


function reloadTable(tableUrl, params, callback) {
    if (!loading) {
        loading = true;
        $(tableRootDiv).load(tableUrl, params, callback);
    }
}